package routers

import (
	"hello/controllers"
	"github.com/astaxie/beego"
    "github.com/astaxie/beego/context"
)

/*
注意：控制器文件名和内容中的控制器名没有关系，不像php框架
如annotation.go 里面是CMS控制器，

路由定义时只和package名和 结构体的控制器名有关
路由匹配依次进行，只要匹配就结束后面的路由匹配

*/


func init() {
	//1-固定路由  --完全匹配
    beego.Router("/", &controllers.MainController{})
	beego.Router("/user", &controllers.UserController{})
	beego.Router("/admin", &controllers.AdminController{})
	beego.Router("/test", &controllers.TestController{})

    beego.Get("/hi",func(ctx *context.Context){ //闭包定义 --get方式
		ctx.Output.Body([]byte("hi --get"))
	})
	beego.Post("/hi",func(ctx *context.Context){
		ctx.Output.Body([]byte("hi --post"))
	})
	beego.Any("/any",func(ctx *context.Context){ //不限定http方法
		ctx.Output.Body([]byte("hi any"))
	})
	beego.Router("/api", &controllers.ApiController{})

	//2-正则路由  --需要完全匹配正则规则
	beego.Router("/api/:id([0-9]+)", &controllers.ApiController{})

    //3-自定义方法及 RESTful 规则  --和tp/laravel路由类似  --不需要像方式1一样靠http动词去识别
	beego.Router("/api/add",&controllers.ApiController{},"*:Add;post:Add2")
	beego.Router("/api/see",&controllers.ApiController{},"*:See")
	beego.Router("/api/save",&controllers.ApiController{},"post:Save")
	beego.Router("/api/edit",&controllers.ApiController{},"post:Edit")
	beego.Router("/api/del",&controllers.ApiController{},"delete:Del")
	beego.Router("/api/get",&controllers.ApiController{},"*:Get") //访问http动词对应的方法
	beego.Router("/api/setsess",&controllers.ApiController{},"*:SetSess")
	beego.Router("/api/getsess",&controllers.ApiController{},"*:GetSess")

    //4-自动路由 --通过反射获取该结构体中所有的实现方法  --里面的方法支持所有http访问方式  --类似传统非restful风格请求
    // auto/login 调用 AutoController 中的 Login 方法
	beego.AutoRouter(&controllers.AutoController{})

    //5-注解路由  ---不建议使用
	beego.Include(&controllers.CMSController{})

}
